Skip to content

fix: resolve ty no-matching-overload on Sandbox.kill()#1119

Merged
beran-t merged 5 commits intomainfrom
validate-sandbox-kill-type
Feb 9, 2026
Merged

fix: resolve ty no-matching-overload on Sandbox.kill()#1119
beran-t merged 5 commits intomainfrom
validate-sandbox-kill-type

Conversation

@beran-t
Copy link
Copy Markdown
Contributor

@beran-t beran-t commented Feb 6, 2026

Summary

  • Fixes ty type checker reporting error[no-matching-overload] when calling Sandbox.kill() (and all other methods using the class_method_variant pattern)
  • Single 2-line change: make class_method_variant inherit from Generic[T] instead of object

Problem

The class_method_variant descriptor uses cast(T, self) to tell type checkers that the decorator preserves the original function's type. Without Generic[T], T is only a method-level TypeVar — ty doesn't trust the cast and fails to resolve overloads at call sites. mypy and pyright are more lenient and accept it either way.

Affected methods (both Sandbox and AsyncSandbox): kill, connect, set_timeout, get_info, get_metrics, beta_pause.

Fix

Adding Generic[T] makes T a class-level type parameter, so ty can track the type binding through the descriptor (class_method_variant[(self, **opts) -> bool]). The cast then makes sense to all three type checkers.

Verification

Tested with a consumer repro (sandbox.kill()) against:

Type Checker Before After
ty 0.0.15 error[no-matching-overload] All checks passed
mypy 1.19.1 All checks passed All checks passed
pyright 1.1.408 All checks passed All checks passed

Test plan

  • Verified ty check passes on consumer-side repro
  • Verified mypy and pyright still pass (no regressions)
  • Verified Python syntax is valid
  • No runtime behavior change (Generic[T] only affects type-level metadata)
  • Existing SDK tests (require E2B API credentials)

Make class_method_variant inherit from Generic[T] so that ty can track
the decorated function's type through the descriptor. Without this, ty
fails overload resolution for all methods using the class_method_variant
pattern (kill, connect, set_timeout, get_info, get_metrics, beta_pause).

Fixes ty error[no-matching-overload] while remaining compatible with
mypy and pyright.
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Feb 6, 2026

🦋 Changeset detected

Latest commit: 5c56dbc

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@e2b/python-sdk Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@mishushakov
Copy link
Copy Markdown
Member

add changeset and merge/release please

@beran-t beran-t merged commit 6395a5f into main Feb 9, 2026
15 checks passed
@beran-t beran-t deleted the validate-sandbox-kill-type branch February 9, 2026 18:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants